package py.una.pol.ii.is2.dao.registro;


import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import py.una.pol.ii.is2.domain.registro.Chofer;

/**
 * Clase que implementa la interfaz ChoferDAO
 * @author mbenitez
 * @date 10/05/2009
 */
@Stateless
public class ChoferDAOBean implements ChoferDAO {
    
    /**
     * Manejador de instancias de entidades para recuperar instancias desde
     * el Persistence Context
     */
    @PersistenceContext
    private EntityManager em;


    /**
     * Inserta una entidad de Chofer en la base de datos.
     *
     * @param chofer Chofer a insertar
     * @return true para señalar que la operación se ejecutó con éxito, en otro caso false.
     * @throws java.lang.Exception
     */
    public boolean insert(Chofer chofer) throws Exception {
        boolean retorno = false;
        try {
            em.persist(chofer);
            retorno = true;
        } catch (Exception e) {
            throw e;
        }finally{
            return retorno;
        }
    }


    /**
     * Modifica una entidad de Chofer en la base de datos. 
     *
     * @param chofer Chofer a editar
     * @return true para señalar que la operación se ejecutó con éxito, en otro caso false.
     * @throws java.lang.Exception
     */
    public boolean update(Chofer chofer) throws Exception {
        boolean retorno = false;
        try {
            em.merge(chofer);
            retorno = true;
        } catch (Exception e) {
            throw e;
        }finally{
            return retorno;
        }
    }

    /**
     * Elimina una entidad de Chofer en la base de datos. 
     *
     * @param chofer Chofer a eliminar
     * @return true para señalar que la operación se ejecutó con éxito, en otro caso false.
     * @throws java.lang.Exception
     */
    public boolean delete(Chofer chofer) throws Exception {
        boolean retorno = false;
        try {
            Chofer mgdChofer = em.merge(chofer);
            em.remove(mgdChofer);
            retorno = true;
        } catch (Exception e) {
            throw e;
        }finally{
            return retorno;
        }
    }

    /**
     * Busca un registro de la tabla chofer por el codigo de la misma.
     * Utiliza el NamedQuery <b>Chofer.findByInsuCod</b> para su efecto.
     *
     * @param codChofer Código de Chofer buscado
     * @return retorno Chofer encontrado, en otro caso null.
     * @throws java.lang.Exception
     */
    public Chofer find(Integer codChofer) throws Exception {
        Chofer retorno = null;
        try {
            Query q = em.createNamedQuery("Chofer.findByChofCod");
            q.setParameter("chofCod", codChofer);
            retorno = (Chofer)q.getSingleResult();
        } catch (Exception e) {
            throw e;
        }finally{
            return retorno;
        }
    }

    /**
     * Devuelve todos los choferes en caso de que el parámetro condicion
     * sea o bien <b>null</b> o <b>vacio</b>, y aquellas que coincidan con la condicion
     * comenzando con la palabra clave <b>condicion</b>.
     * Las entidades son devueltas ordenadas por la clave primaria.
     *
     *
     * @param condicion Restricción para la selección de resultados
     * @return retorno Lista de resultados arrojados por la ejecución de la consulta, en otro caso null.
     * @throws java.lang.Exception
     */
    public List<Chofer> getListaChofer(String condicion) throws Exception {
        List<Chofer> retorno = null;
        Query q = null;
        try {
            if(condicion == null || condicion.length() == 0)
                q = em.createNamedQuery("Chofer.findAll");
            else
                q = em.createQuery("select c from Chofer c " + condicion + " order by c.chofCod");
            // recuperamos la lista
            retorno = q.getResultList();
        } catch (Exception e) {
            throw e;
        }finally{
            return retorno;
        }
    }

    /**
     * Devuelve null en caso de que el parámetro condicion
     * sea o bien <b>null</b> o <b>vacio</b>, y aquellas que coincidan con la condicion
     * comenzando con la palabra clave <b>condicion</b>.
     * Las entidades son devueltas ordenadas por la clave primaria.
     *
     *
     * @param condicion Restricción para la selección de resultados
     * @return retorno Lista de resultados arrojados por la ejecución de la consulta, en otro caso null.
     * @throws java.lang.Exception
     */
    public List<Chofer> getListaChoferFiltro(String condicion) throws Exception {
        List<Chofer> retorno = null;
        Query q = null;
        try {
            if(condicion != null || condicion.length() > 0)
                q = em.createQuery("select c from Chofer c " + condicion + " order by c.chofCod");
            // recuperamos la lista
            retorno = q.getResultList();
        } catch (Exception e) {
            throw e;
        }finally{
            return retorno;
        }
    }
 
}
